adbb77815d38193d1c242f8905ebe6f4eb26f66c,core/baseLanguage/graphLayout/solutions/jetbrains.mps.graphLayout.orthogonalLayout/source_gen/jetbrains/mps/graphLayout/stOrthogonalLayout/RectOrthogonalLayouter.java,RectOrthogonalLayouter,doLayout,#Graph#Map#,49
Before Change
for (int i = 0; i <= maxComponent; i++) {
Graph subgraph = ListSequence.fromList(subgraphs).addElement(new Graph());
MapSequence.fromMap(xSizes).put(subgraph, MapSequence.fromMap(new HashMap<Node, Integer>()));
MapSequence.fromMap(ySizes).put(subgraph, MapSequence.fromMap(new HashMap<Node, Integer>()));
}
for (Node node : ListSequence.fromList(graph.getNodes())) {
Graph subgraph = ListSequence.fromList(subgraphs).getElement(MapSequence.fromMap(components).get(node));
After Change
Map<Graph, Map<Edge, Dimension>> subEdgeSizes = MapSequence.fromMap(new HashMap<Graph, Map<Edge, Dimension>>());
for (int i = 0; i <= maxComponent; i++) {
Graph subgraph = ListSequence.fromList(subgraphs).addElement(new Graph());
MapSequence.fromMap(subNodeSizes).put(subgraph, MapSequence.fromMap(new HashMap<Node, Dimension>()));
MapSequence.fromMap(subEdgeSizes).put(subgraph, MapSequence.fromMap(new HashMap<Edge, Dimension>()));
}
for (Node node : ListSequence.fromList(graph.getNodes())) {
Graph subgraph = ListSequence.fromList(subgraphs).getElement(MapSequence.fromMap(components).get(node));
Node newNode = subgraph.addNode();
MapSequence.fromMap(newNodes).put(node, newNode);
MapSequence.fromMap(nodeSubgraphs).put(node, subgraph);
MapSequence.fromMap(MapSequence.fromMap(subNodeSizes).get(subgraph)).put(newNode, new Dimension(MapSequence.fromMap(nodeSizes).get(node).width + myEdgeDistance, MapSequence.fromMap(nodeSizes).get(node).height));
}
for (Edge edge : ListSequence.fromList(graph.getEdges())) {
Edge newEdge = MapSequence.fromMap(newNodes).get(edge.getSource()).addEdgeTo(MapSequence.fromMap(newNodes).get(edge.getTarget()));
MapSequence.fromMap(newEdges).put(edge, newEdge);
Graph subgraph = MapSequence.fromMap(nodeSubgraphs).get(edge.getSource());
MapSequence.fromMap(MapSequence.fromMap(subEdgeSizes).get(subgraph)).put(newEdge, new Dimension(MapSequence.fromMap(edgeSizes).get(edge).width + myEdgeDistance, MapSequence.fromMap(edgeSizes).get(edge).height + myEdgeDistance));
}
Map<Graph, GraphLayout> subgraphLayouts = MapSequence.fromMap(new HashMap<Graph, GraphLayout>());
int shiftX = 0;
for (Graph subgraph : ListSequence.fromList(subgraphs)) {
GraphLayout curLayout = findSTLayout(subgraph, MapSequence.fromMap(subNodeSizes).get(subgraph), MapSequence.fromMap(subEdgeSizes).get(subgraph));
curLayout = LayoutTransform.shift(curLayout, shiftX, 0);
MapSequence.fromMap(subgraphLayouts).put(subgraph, curLayout);
shiftX = curLayout.getContainingRectangle().x + curLayout.getContainingRectangle().width + 30;
}
GraphLayout layout = new GraphLayout(graph);
for (Node node : ListSequence.fromList(graph.getNodes())) {
Graph subgraph = MapSequence.fromMap(nodeSubgraphs).get(node);
layout.setLayoutFor(node, MapSequence.fromMap(subgraphLayouts).get(subgraph).getLayoutFor(MapSequence.fromMap(newNodes).get(node)));
}
for (Edge edge : ListSequence.fromList(graph.getEdges())) {
GraphLayout subgraphLayout = MapSequence.fromMap(subgraphLayouts).get(MapSequence.fromMap(nodeSubgraphs).get(edge.getSource()));
layout.setLayoutFor(edge, subgraphLayout.getLayoutFor(MapSequence.fromMap(newEdges).get(edge)));
layout.setLabelLayout(edge, subgraphLayout.getLabelLayout(MapSequence.fromMap(myMovedLabels).get(MapSequence.fromMap(newEdges).get(edge))));
}
if (myLayoutLevel == 0) {
return MapSequence.fromMap(subgraphLayouts).get(ListSequence.fromList(subgraphs).getElement(0));